diff --git a/system/core/CodeIgniter.php b/system/core/CodeIgniter.php
index 70f33d5..22072e9 100644
--- a/system/core/CodeIgniter.php
+++ b/system/core/CodeIgniter.php
@@ -416,11 +416,7 @@
 			$params = array($method, array_slice($URI->rsegments, 2));
 			$method = '_remap';
 		}
-		// WARNING: It appears that there are issues with is_callable() even in PHP 5.2!
-		// Furthermore, there are bug reports and feature/change requests related to it
-		// that make it unreliable to use in this context. Please, DO NOT change this
-		// work-around until a better alternative is available.
-		elseif ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($class)), TRUE))
+		elseif ( ! is_callable(array($class, $method)))
 		{
 			$e404 = TRUE;
 		}
diff --git a/system/core/Security.php b/system/core/Security.php
index d5305d1..a290700 100644
--- a/system/core/Security.php
+++ b/system/core/Security.php
@@ -678,12 +678,7 @@
 			{
 				if ( ! isset($_entities))
 				{
-					$_entities = array_map(
-						'strtolower',
-						is_php('5.3.4')
-							? get_html_translation_table(HTML_ENTITIES, $flag, $charset)
-							: get_html_translation_table(HTML_ENTITIES, $flag)
-					);
+					$_entities = array_map('strtolower', get_html_translation_table(HTML_ENTITIES, $flag, $charset));
 
 					// If we're not on PHP 5.4+, add the possibly dangerous HTML 5
 					// entities to the array manually
diff --git a/system/core/compat/password.php b/system/core/compat/password.php
index 76dd2cf..1b5219e 100644
--- a/system/core/compat/password.php
+++ b/system/core/compat/password.php
@@ -50,7 +50,7 @@
 
 // ------------------------------------------------------------------------
 
-if (is_php('5.5') OR ! is_php('5.3.7') OR ! defined('CRYPT_BLOWFISH') OR CRYPT_BLOWFISH !== 1 OR defined('HHVM_VERSION'))
+if (is_php('5.5') OR ! defined('CRYPT_BLOWFISH') OR CRYPT_BLOWFISH !== 1 OR defined('HHVM_VERSION'))
 {
 	return;
 }
diff --git a/system/core/compat/standard.php b/system/core/compat/standard.php
index c54cab9..c839c9b 100644
--- a/system/core/compat/standard.php
+++ b/system/core/compat/standard.php
@@ -180,210 +180,3 @@
 		return pack('H*', $data);
 	}
 }
-
-// ------------------------------------------------------------------------
-
-if (is_php('5.3'))
-{
-	return;
-}
-
-// ------------------------------------------------------------------------
-
-if ( ! function_exists('array_replace'))
-{
-	/**
-	 * array_replace()
-	 *
-	 * @link	http://php.net/array_replace
-	 * @return	array
-	 */
-	function array_replace()
-	{
-		$arrays = func_get_args();
-
-		if (($c = count($arrays)) === 0)
-		{
-			trigger_error('array_replace() expects at least 1 parameter, 0 given', E_USER_WARNING);
-			return NULL;
-		}
-		elseif ($c === 1)
-		{
-			if ( ! is_array($arrays[0]))
-			{
-				trigger_error('array_replace(): Argument #1 is not an array', E_USER_WARNING);
-				return NULL;
-			}
-
-			return $arrays[0];
-		}
-
-		$array = array_shift($arrays);
-		$c--;
-
-		for ($i = 0; $i < $c; $i++)
-		{
-			if ( ! is_array($arrays[$i]))
-			{
-				trigger_error('array_replace(): Argument #'.($i + 2).' is not an array', E_USER_WARNING);
-				return NULL;
-			}
-			elseif (empty($arrays[$i]))
-			{
-				continue;
-			}
-
-			foreach (array_keys($arrays[$i]) as $key)
-			{
-				$array[$key] = $arrays[$i][$key];
-			}
-		}
-
-		return $array;
-	}
-}
-
-// ------------------------------------------------------------------------
-
-if ( ! function_exists('array_replace_recursive'))
-{
-	/**
-	 * array_replace_recursive()
-	 *
-	 * @link	http://php.net/array_replace_recursive
-	 * @return	array
-	 */
-	function array_replace_recursive()
-	{
-		$arrays = func_get_args();
-
-		if (($c = count($arrays)) === 0)
-		{
-			trigger_error('array_replace_recursive() expects at least 1 parameter, 0 given', E_USER_WARNING);
-			return NULL;
-		}
-		elseif ($c === 1)
-		{
-			if ( ! is_array($arrays[0]))
-			{
-				trigger_error('array_replace_recursive(): Argument #1 is not an array', E_USER_WARNING);
-				return NULL;
-			}
-
-			return $arrays[0];
-		}
-
-		$array = array_shift($arrays);
-		$c--;
-
-		for ($i = 0; $i < $c; $i++)
-		{
-			if ( ! is_array($arrays[$i]))
-			{
-				trigger_error('array_replace_recursive(): Argument #'.($i + 2).' is not an array', E_USER_WARNING);
-				return NULL;
-			}
-			elseif (empty($arrays[$i]))
-			{
-				continue;
-			}
-
-			foreach (array_keys($arrays[$i]) as $key)
-			{
-				$array[$key] = (is_array($arrays[$i][$key]) && isset($array[$key]) && is_array($array[$key]))
-					? array_replace_recursive($array[$key], $arrays[$i][$key])
-					: $arrays[$i][$key];
-			}
-		}
-
-		return $array;
-	}
-}
-
-// ------------------------------------------------------------------------
-
-if ( ! function_exists('quoted_printable_encode'))
-{
-	/**
-	 * quoted_printable_encode()
-	 *
-	 * @link	http://php.net/quoted_printable_encode
-	 * @param	string	$str
-	 * @return	string
-	 */
-	function quoted_printable_encode($str)
-	{
-		if (strlen($str) === 0)
-		{
-			return '';
-		}
-		elseif (in_array($type = gettype($str), array('array', 'object'), TRUE))
-		{
-			if ($type === 'object' && method_exists($str, '__toString'))
-			{
-				$str = (string) $str;
-			}
-			else
-			{
-				trigger_error('quoted_printable_encode() expects parameter 1 to be string, '.$type.' given', E_USER_WARNING);
-				return NULL;
-			}
-		}
-
-		if (function_exists('imap_8bit'))
-		{
-			return imap_8bit($str);
-		}
-
-		$i = $lp = 0;
-		$output = '';
-		$hex = '0123456789ABCDEF';
-		$length = (extension_loaded('mbstring') && ini_get('mbstring.func_overload'))
-			? mb_strlen($str, '8bit')
-			: strlen($str);
-
-		while ($length--)
-		{
-			if ((($c = $str[$i++]) === "\015") && isset($str[$i]) && ($str[$i] === "\012") && $length > 0)
-			{
-				$output .= "\015".$str[$i++];
-				$length--;
-				$lp = 0;
-				continue;
-			}
-
-			if (
-				ctype_cntrl($c)
-				OR (ord($c) === 0x7f)
-				OR (ord($c) & 0x80)
-				OR ($c === '=')
-				OR ($c === ' ' && isset($str[$i]) && $str[$i] === "\015")
-			)
-			{
-				if (
-					(($lp += 3) > 75 && ord($c) <= 0x7f)
-					OR (ord($c) > 0x7f && ord($c) <= 0xdf && ($lp + 3) > 75)
-					OR (ord($c) > 0xdf && ord($c) <= 0xef && ($lp + 6) > 75)
-					OR (ord($c) > 0xef && ord($c) <= 0xf4 && ($lp + 9) > 75)
-				)
-				{
-					$output .= "=\015\012";
-					$lp = 3;
-				}
-
-				$output .= '='.$hex[ord($c) >> 4].$hex[ord($c) & 0xf];
-				continue;
-			}
-
-			if ((++$lp) > 75)
-			{
-				$output .= "=\015\012";
-				$lp = 1;
-			}
-
-			$output .= $c;
-		}
-
-		return $output;
-	}
-}
diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php
index f52163c..f4597c7 100644
--- a/system/database/drivers/mysqli/mysqli_driver.php
+++ b/system/database/drivers/mysqli/mysqli_driver.php
@@ -125,8 +125,7 @@
 		}
 		else
 		{
-			// Persistent connection support was added in PHP 5.3.0
-			$hostname = ($persistent === TRUE && is_php('5.3'))
+			$hostname = ($persistent === TRUE)
 				? 'p:'.$this->hostname : $this->hostname;
 			$port = empty($this->port) ? NULL : $this->port;
 			$socket = NULL;
@@ -502,8 +501,8 @@
 		if ( ! empty($this->_mysqli->connect_errno))
 		{
 			return array(
-				'code' => $this->_mysqli->connect_errno,
-				'message' => is_php('5.2.9') ? $this->_mysqli->connect_error : mysqli_connect_error()
+				'code'    => $this->_mysqli->connect_errno,
+				'message' => $this->_mysqli->connect_error
 			);
 		}
 
diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index df7e084..56fdf32 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -386,7 +386,7 @@
 	 */
 	protected function _trans_begin()
 	{
-		$this->commit_mode = is_php('5.3.2') ? OCI_NO_AUTO_COMMIT : OCI_DEFAULT;
+		$this->commit_mode = OCI_NO_AUTO_COMMIT;
 		return TRUE;
 	}
 
diff --git a/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php b/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php
index 38a5a8a..3631cdf 100644
--- a/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php
+++ b/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php
@@ -106,7 +106,7 @@
 			empty($this->database) OR $this->dsn .= ';dbname='.$this->database;
 			empty($this->char_set) OR $this->dsn .= ';charset='.$this->char_set;
 		}
-		elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 6) === FALSE && is_php('5.3.6'))
+		elseif ( ! empty($this->char_set) && strpos($this->dsn, 'charset=', 6) === FALSE)
 		{
 			$this->dsn .= ';charset='.$this->char_set;
 		}
@@ -122,17 +122,6 @@
 	 */
 	public function db_connect($persistent = FALSE)
 	{
-		/* Prior to PHP 5.3.6, even if the charset was supplied in the DSN
-		 * on connect - it was ignored. This is a work-around for the issue.
-		 *
-		 * Reference: http://www.php.net/manual/en/ref.pdo-mysql.connection.php
-		 */
-		if ( ! is_php('5.3.6') && ! empty($this->char_set))
-		{
-			$this->options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES '.$this->char_set
-				.(empty($this->dbcollat) ? '' : ' COLLATE '.$this->dbcollat);
-		}
-
 		if (isset($this->stricton))
 		{
 			if ($this->stricton)
@@ -169,8 +158,7 @@
 			$this->options[PDO::MYSQL_ATTR_COMPRESS] = TRUE;
 		}
 
-		// SSL support was added to PDO_MYSQL in PHP 5.3.7
-		if (is_array($this->encrypt) && is_php('5.3.7'))
+		if (is_array($this->encrypt))
 		{
 			$ssl = array();
 			empty($this->encrypt['ssl_key'])    OR $ssl[PDO::MYSQL_ATTR_SSL_KEY]    = $this->encrypt['ssl_key'];
diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php
index c43209f..5f1fcf0 100644
--- a/system/helpers/date_helper.php
+++ b/system/helpers/date_helper.php
@@ -707,87 +707,32 @@
 
 		$range = array();
 
-		/* NOTE: Even though the DateTime object has many useful features, it appears that
-		 *	 it doesn't always handle properly timezones, when timestamps are passed
-		 *	 directly to its constructor. Neither of the following gave proper results:
-		 *
-		 *		new DateTime('<timestamp>')
-		 *		new DateTime('<timestamp>', '<timezone>')
-		 *
-		 *	 --- available in PHP 5.3:
-		 *
-		 *		DateTime::createFromFormat('<format>', '<timestamp>')
-		 *		DateTime::createFromFormat('<format>', '<timestamp>', '<timezone')
-		 *
-		 *	 ... so we'll have to set the timestamp after the object is instantiated.
-		 *	 Furthermore, in PHP 5.3 we can use DateTime::setTimestamp() to do that and
-		 *	 given that we have UNIX timestamps - we should use it.
-		*/
 		$from = new DateTime();
+		$from->setTimestamp($unix_start);
 
-		if (is_php('5.3'))
-		{
-			$from->setTimestamp($unix_start);
-			if ($is_unix)
-			{
-				$arg = new DateTime();
-				$arg->setTimestamp($mixed);
-			}
-			else
-			{
-				$arg = (int) $mixed;
-			}
-
-			$period = new DatePeriod($from, new DateInterval('P1D'), $arg);
-			foreach ($period as $date)
-			{
-				$range[] = $date->format($format);
-			}
-
-			/* If a period end date was passed to the DatePeriod constructor, it might not
-			 * be in our results. Not sure if this is a bug or it's just possible because
-			 * the end date might actually be less than 24 hours away from the previously
-			 * generated DateTime object, but either way - we have to append it manually.
-			 */
-			if ( ! is_int($arg) && $range[count($range) - 1] !== $arg->format($format))
-			{
-				$range[] = $arg->format($format);
-			}
-
-			return $range;
-		}
-
-		$from->setDate(date('Y', $unix_start), date('n', $unix_start), date('j', $unix_start));
-		$from->setTime(date('G', $unix_start), date('i', $unix_start), date('s', $unix_start));
 		if ($is_unix)
 		{
 			$arg = new DateTime();
-			$arg->setDate(date('Y', $mixed), date('n', $mixed), date('j', $mixed));
-			$arg->setTime(date('G', $mixed), date('i', $mixed), date('s', $mixed));
+			$arg->setTimestamp($mixed);
 		}
 		else
 		{
 			$arg = (int) $mixed;
 		}
-		$range[] = $from->format($format);
 
-		if (is_int($arg)) // Day intervals
+		$period = new DatePeriod($from, new DateInterval('P1D'), $arg);
+		foreach ($period as $date)
 		{
-			do
-			{
-				$from->modify('+1 day');
-				$range[] = $from->format($format);
-			}
-			while (--$arg > 0);
+			$range[] = $date->format($format);
 		}
-		else // end date UNIX timestamp
-		{
-			for ($from->modify('+1 day'), $end_check = $arg->format('Ymd'); $from->format('Ymd') < $end_check; $from->modify('+1 day'))
-			{
-				$range[] = $from->format($format);
-			}
 
-			// Our loop only appended dates prior to our end date
+		/* If a period end date was passed to the DatePeriod constructor, it might not
+		 * be in our results. Not sure if this is a bug or it's just possible because
+		 * the end date might actually be less than 24 hours away from the previously
+		 * generated DateTime object, but either way - we have to append it manually.
+		 */
+		if ( ! is_int($arg) && $range[count($range) - 1] !== $arg->format($format))
+		{
 			$range[] = $arg->format($format);
 		}
 
diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index be89d65..5049578 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -1514,14 +1514,7 @@
 		// which only works with "\n".
 		if ($this->crlf === "\r\n")
 		{
-			if (is_php('5.3'))
-			{
-				return quoted_printable_encode($str);
-			}
-			elseif (function_exists('imap_8bit'))
-			{
-				return imap_8bit($str);
-			}
+			return quoted_printable_encode($str);
 		}
 
 		// Reduce multiple spaces & remove nulls
diff --git a/system/libraries/Encryption.php b/system/libraries/Encryption.php
index a10a5c2..06284c2 100644
--- a/system/libraries/Encryption.php
+++ b/system/libraries/Encryption.php
@@ -152,10 +152,8 @@
 	public function __construct(array $params = array())
 	{
 		$this->_drivers = array(
-			'mcrypt' => defined('MCRYPT_DEV_URANDOM'),
-			// While OpenSSL is available for PHP 5.3.0, an IV parameter
-			// for the encrypt/decrypt functions is only available since 5.3.3
-			'openssl' => (is_php('5.3.3') && extension_loaded('openssl'))
+			'mcrypt'  => defined('MCRYPT_DEV_URANDOM'),
+			'openssl' => extension_loaded('openssl')
 		);
 
 		if ( ! $this->_drivers['mcrypt'] && ! $this->_drivers['openssl'])
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 04445f5..25dc0d4 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -1216,18 +1216,7 @@
 			$str = 'ipv6.host'.substr($str, strlen($matches[1]) + 2);
 		}
 
-		$str = 'http://'.$str;
-
-		// There's a bug affecting PHP 5.2.13, 5.3.2 that considers the
-		// underscore to be a valid hostname character instead of a dash.
-		// Reference: https://bugs.php.net/bug.php?id=51192
-		if (version_compare(PHP_VERSION, '5.2.13', '==') OR version_compare(PHP_VERSION, '5.3.2', '=='))
-		{
-			sscanf($str, 'http://%[^/]', $host);
-			$str = substr_replace($str, strtr($host, array('_' => '-', '-' => '_')), 7, strlen($host));
-		}
-
-		return (filter_var($str, FILTER_VALIDATE_URL) !== FALSE);
+		return (filter_var('http://'.$str, FILTER_VALIDATE_URL) !== FALSE);
 	}
 
 	// --------------------------------------------------------------------
diff --git a/system/libraries/Migration.php b/system/libraries/Migration.php
index 316c94a..3e2107e 100644
--- a/system/libraries/Migration.php
+++ b/system/libraries/Migration.php
@@ -288,10 +288,7 @@
 				$this->_error_string = sprintf($this->lang->line('migration_class_doesnt_exist'), $class);
 				return FALSE;
 			}
-			// method_exists() returns true for non-public methods,
-			// while is_callable() can't be used without instantiating.
-			// Only get_class_methods() satisfies both conditions.
-			elseif ( ! in_array($method, array_map('strtolower', get_class_methods($class))))
+			elseif ( ! is_callable(array($class, $method)))
 			{
 				$this->_error_string = sprintf($this->lang->line('migration_missing_'.$method.'_method'), $class);
 				return FALSE;
diff --git a/system/libraries/Session/drivers/Session_files_driver.php b/system/libraries/Session/drivers/Session_files_driver.php
index 57c3777..bf4df8b 100644
--- a/system/libraries/Session/drivers/Session_files_driver.php
+++ b/system/libraries/Session/drivers/Session_files_driver.php
@@ -149,18 +149,9 @@
 		// which re-reads session data
 		if ($this->_file_handle === NULL)
 		{
-			// Just using fopen() with 'c+b' mode would be perfect, but it is only
-			// available since PHP 5.2.6 and we have to set permissions for new files,
-			// so we'd have to hack around this ...
-			if (($this->_file_new = ! file_exists($this->_file_path.$session_id)) === TRUE)
-			{
-				if (($this->_file_handle = fopen($this->_file_path.$session_id, 'w+b')) === FALSE)
-				{
-					log_message('error', "Session: File '".$this->_file_path.$session_id."' doesn't exist and cannot be created.");
-					return $this->_failure;
-				}
-			}
-			elseif (($this->_file_handle = fopen($this->_file_path.$session_id, 'r+b')) === FALSE)
+			$this->_file_new = ! file_exists($this->_file_path.$session_id);
+
+			if (($this->_file_handle = fopen($this->_file_path.$session_id, 'c+b')) === FALSE)
 			{
 				log_message('error', "Session: Unable to open file '".$this->_file_path.$session_id."'.");
 				return $this->_failure;
diff --git a/system/libraries/Upload.php b/system/libraries/Upload.php
index 056f6de..a8cf752 100644
--- a/system/libraries/Upload.php
+++ b/system/libraries/Upload.php
@@ -1086,13 +1086,7 @@
 		if (memory_get_usage() && ($memory_limit = ini_get('memory_limit')))
 		{
 			$memory_limit *= 1024 * 1024;
-
-			// There was a bug/behavioural change in PHP 5.2, where numbers over one million get output
-			// into scientific notation. number_format() ensures this number is an integer
-			// http://bugs.php.net/bug.php?id=43053
-
-			$memory_limit = number_format(ceil(filesize($file) + $memory_limit), 0, '.', '');
-
+			$memory_limit = (int) ceil(filesize($file) + $memory_limit);
 			ini_set('memory_limit', $memory_limit); // When an integer is used, the value is measured in bytes. - PHP.net
 		}
 
@@ -1207,28 +1201,21 @@
 		// We'll need this to validate the MIME info string (e.g. text/plain; charset=us-ascii)
 		$regexp = '/^([a-z\-]+\/[a-z0-9\-\.\+]+)(;\s.+)?$/';
 
-		/* Fileinfo extension - most reliable method
-		 *
-		 * Unfortunately, prior to PHP 5.3 - it's only available as a PECL extension and the
-		 * more convenient FILEINFO_MIME_TYPE flag doesn't exist.
-		 */
-		if (function_exists('finfo_file'))
+		// Fileinfo extension - most reliable method
+		$finfo = @finfo_open(FILEINFO_MIME);
+		if (is_resource($finfo)) // It is possible that a FALSE value is returned, if there is no magic MIME database file found on the system
 		{
-			$finfo = @finfo_open(FILEINFO_MIME);
-			if (is_resource($finfo)) // It is possible that a FALSE value is returned, if there is no magic MIME database file found on the system
-			{
-				$mime = @finfo_file($finfo, $file['tmp_name']);
-				finfo_close($finfo);
+			$mime = @finfo_file($finfo, $file['tmp_name']);
+			finfo_close($finfo);
 
-				/* According to the comments section of the PHP manual page,
-				 * it is possible that this function returns an empty string
-				 * for some files (e.g. if they don't exist in the magic MIME database)
-				 */
-				if (is_string($mime) && preg_match($regexp, $mime, $matches))
-				{
-					$this->file_type = $matches[1];
-					return;
-				}
+			/* According to the comments section of the PHP manual page,
+			 * it is possible that this function returns an empty string
+			 * for some files (e.g. if they don't exist in the magic MIME database)
+			 */
+			if (is_string($mime) && preg_match($regexp, $mime, $matches))
+			{
+				$this->file_type = $matches[1];
+				return;
 			}
 		}
 
diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php
index 8240d23..b4e56bd 100644
--- a/tests/Bootstrap.php
+++ b/tests/Bootstrap.php
@@ -1,10 +1,4 @@
 <?php
-// For some reason, setting this fixes the 5.2 tests but breaks the 5.3 ones ...
-if (version_compare(PHP_VERSION, '5.3.0', '<'))
-{
-	ini_set('memory_limit', '128M');
-}
-
 // Errors on full!
 ini_set('display_errors', 1);
 error_reporting(E_ALL | E_STRICT);
diff --git a/tests/codeigniter/core/Log_test.php b/tests/codeigniter/core/Log_test.php
index 2dd9d90..d5a6fcb 100644
--- a/tests/codeigniter/core/Log_test.php
+++ b/tests/codeigniter/core/Log_test.php
@@ -3,11 +3,6 @@
 
 	public function test_configuration()
 	{
-		if ( ! is_php('5.3'))
-		{
-			return $this->markTestSkipped("PHP 5.2 doesn't have ReflectionProperty::setAccessible() and can't run this test");
-		}
-
 		$path       = new ReflectionProperty('CI_Log', '_log_path');
 		$path->setAccessible(TRUE);
 		$threshold  = new ReflectionProperty('CI_Log', '_threshold');
@@ -54,11 +49,6 @@
 
 	public function test_format_line()
 	{
-		if ( ! is_php('5.3'))
-		{
-			return $this->markTestSkipped("PHP 5.2 doesn't have ReflectionProperty::setAccessible() and can't run this test");
-		}
-
 		$this->ci_set_config('log_path', '');
 		$this->ci_set_config('log_threshold', 0);
 		$instance = new CI_Log();
diff --git a/tests/codeigniter/core/compat/password_test.php b/tests/codeigniter/core/compat/password_test.php
index 8a507d1..77f5eba 100644
--- a/tests/codeigniter/core/compat/password_test.php
+++ b/tests/codeigniter/core/compat/password_test.php
@@ -8,11 +8,6 @@
 		{
 			return $this->markTestSkipped('ext/standard/password is available on PHP 5.5');
 		}
-		elseif ( ! is_php('5.3.7'))
-		{
-			$this->assertFalse(defined('PASSWORD_BCRYPT'));
-			return $this->markTestSkipped("PHP versions prior to 5.3.7 don't have the '2y' Blowfish version");
-		}
 		// defined as of HHVM 2.3.0, which is also when they introduce password_*() as well
 		// Note: Do NOT move this after the CRYPT_BLOWFISH check
 		elseif (defined('HHVM_VERSION'))
diff --git a/tests/codeigniter/core/compat/standard_test.php b/tests/codeigniter/core/compat/standard_test.php
index 4077a5c..a984601 100644
--- a/tests/codeigniter/core/compat/standard_test.php
+++ b/tests/codeigniter/core/compat/standard_test.php
@@ -15,13 +15,6 @@
 		{
 			$this->assertTrue(function_exists('hex2bin'));
 		}
-
-		if ( ! is_php('5.3'))
-		{
-			$this->assertTrue(function_exists('array_replace'));
-			$this->assertTrue(function_exists('array_replace_recursive'));
-			$this->assertTrue(function_exists('quoted_printable_encode'));
-		}
 	}
 
 	// ------------------------------------------------------------------------
@@ -356,193 +349,6 @@
 		$this->assertEquals('', hex2bin(''));
 		$this->assertEquals("\x01\x02\x03", hex2bin(new FooHex()));
 	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * array_replace(), array_replace_recursive() tests
-	 *
-	 * Borrowed from PHP's own tests
-	 *
-	 * @depends	test_bootstrap
-	 */
-	public function test_array_replace_recursive()
-	{
-		if (is_php('5.3'))
-		{
-			return $this->markTestSkipped('array_replace() and array_replace_recursive() are already available on PHP 5.3');
-		}
-
-		$array1 = array(
-			0 => 'dontclobber',
-			'1' => 'unclobbered',
-			'test2' => 0.0,
-			'test3' => array(
-				'testarray2' => TRUE,
-				1 => array(
-					'testsubarray1' => 'dontclobber2',
-					'testsubarray2' => 'dontclobber3'
-				)
-			)
-		);
-
-		$array2 = array(
-			1 => 'clobbered',
-			'test3' => array(
-				'testarray2' => FALSE
-			),
-			'test4' => array(
-				'clobbered3' => array(0, 1, 2)
-			)
-		);
-
-		// array_replace()
-		$this->assertEquals(
-			array(
-				0 => 'dontclobber',
-				1 => 'clobbered',
-				'test2' => 0.0,
-				'test3' => array(
-					'testarray2' => FALSE
-				),
-				'test4' => array(
-					'clobbered3' => array(0, 1, 2)
-				)
-			),
-			array_replace($array1, $array2)
-		);
-
-		// array_replace_recursive()
-		$this->assertEquals(
-			array(
-				0 => 'dontclobber',
-				1 => 'clobbered',
-				'test2' => 0.0,
-				'test3' => array(
-					'testarray2' => FALSE,
-					1 => array(
-						'testsubarray1' => 'dontclobber2',
-						'testsubarray2' => 'dontclobber3'
-					)
-				),
-				'test4' => array(
-					'clobbered3' => array(0, 1, 2)
-				)
-			),
-			array_replace_recursive($array1, $array2)
-		);
-	}
-
-	// ------------------------------------------------------------------------
-
-	/**
-	 * quoted_printable_encode() tests
-	 *
-	 * Borrowed from PHP's own tests
-	 *
-	 * @depends	test_bootstrap
-	 */
-	public function test_quoted_printable_encode()
-	{
-		if (is_php('5.3'))
-		{
-			return $this->markTestSkipped('quoted_printable_encode() is already available on PHP 5.3');
-		}
-
-		// These are actually imap_8bit() tests:
-		$this->assertEquals("String with CRLF at end=20\r\n", quoted_printable_encode("String with CRLF at end \r\n"));
-		// ext/imap/tests/imap_8bit_basic.phpt says for this line:
-		// NB this appears to be a bug in cclient; a space at end of string should be encoded as =20
-		$this->assertEquals("String with space at end ", quoted_printable_encode("String with space at end "));
-		$this->assertEquals("String with tabs =09=09 in middle", quoted_printable_encode("String with tabs \t\t in middle"));
-		$this->assertEquals("String with tab at end =09", quoted_printable_encode("String with tab at end \t"));
-		$this->assertEquals("=00=01=02=03=04=FE=FF=0A=0D", quoted_printable_encode("\x00\x01\x02\x03\x04\xfe\xff\x0a\x0d"));
-
-		if (function_exists('imap_8bit'))
-		{
-			return $this->markTestIncomplete('imap_8bit() exists and is called as an alias for quoted_printable_encode()');
-		}
-
-		// And these are from ext/standard/tests/strings/quoted_printable_encode_002.phpt:
-		$this->assertEquals(
-			"=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=\r\n"
-			."=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00=00",
-			$d = quoted_printable_encode(str_repeat("\0", 200))
-		);
-		$this->assertEquals(str_repeat("\x0", 200), quoted_printable_decode($d));
-		$this->assertEquals(
-			"=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=\r\n"
-			."=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=\r\n"
-			."=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=\r\n"
-			."=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=\r\n"
-			."=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=\r\n"
-			."=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=\r\n"
-			."=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=\r\n"
-			."=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=\r\n"
-			."=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =\r\n"
-			."=D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=\r\n"
-			."=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=\r\n"
-			."=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=\r\n"
-			."=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=\r\n"
-			."=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=\r\n"
-			."=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=\r\n"
-			."=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=\r\n"
-			."=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=\r\n"
-			."=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=\r\n"
-			."=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=\r\n"
-			."=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =\r\n"
-			."=D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=\r\n"
-			."=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=\r\n"
-			."=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=\r\n"
-			."=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=\r\n"
-			."=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=\r\n"
-			."=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=\r\n"
-			."=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=\r\n"
-			."=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=\r\n"
-			."=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=\r\n"
-			."=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=\r\n"
-			."=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=\r\n"
-			."=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =\r\n"
-			."=D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=\r\n"
-			."=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=\r\n"
-			."=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=\r\n"
-			."=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=\r\n"
-			."=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=\r\n"
-			."=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=\r\n"
-			."=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=\r\n"
-			."=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=\r\n"
-			."=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=\r\n"
-			."=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=\r\n"
-			."=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =\r\n"
-			."=D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=\r\n"
-			."=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=\r\n"
-			."=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=\r\n"
-			."=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=\r\n"
-			."=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=\r\n"
-			."=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=\r\n"
-			."=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=\r\n"
-			."=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=\r\n"
-			."=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=\r\n"
-			."=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=\r\n"
-			."=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=\r\n"
-			."=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =\r\n"
-			."=D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=\r\n"
-			."=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=\r\n"
-			."=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=\r\n"
-			."=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=8E=D0=BD=D0=B8=\r\n"
-			."=D0=BA=D0=BE=D0=B4=D0=B5=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=B0 =D0=B2 =D1=\r\n"
-			."=8E=D0=BD=D0=B8=D0=BA=D0=BE=D0=B4=D0=B5",
-			$d = quoted_printable_encode(str_repeat('строка в юникоде', 50))
-		);
-		$this->assertEquals(str_repeat('строка в юникоде', 50), quoted_printable_decode($d));
-		$this->assertEquals('this is a foo', quoted_printable_encode(new FooObject()));
-	}
 }
 
 // ------------------------------------------------------------------------
@@ -570,11 +376,3 @@
 		return '010203';
 	}
 }
-
-class FooObject
-{
-	public function __toString()
-	{
-		return 'this is a foo';
-	}
-}
\ No newline at end of file
diff --git a/tests/codeigniter/libraries/Upload_test.php b/tests/codeigniter/libraries/Upload_test.php
index 4fbc11e..820bd37 100644
--- a/tests/codeigniter/libraries/Upload_test.php
+++ b/tests/codeigniter/libraries/Upload_test.php
@@ -25,14 +25,10 @@
 			)
 		);
 
-		// ReflectionProperty::setAccessible() is not available in PHP 5.2.x
-		if (is_php('5.3'))
-		{
-			$reflection = new ReflectionClass($upload);
-			$reflection = $reflection->getProperty('_file_name_override');
-			$reflection->setAccessible(TRUE);
-			$this->assertEquals('foo', $reflection->getValue($upload));
-		}
+		$reflection = new ReflectionClass($upload);
+		$reflection = $reflection->getProperty('_file_name_override');
+		$reflection->setAccessible(TRUE);
+		$this->assertEquals('foo', $reflection->getValue($upload));
 
 		$this->assertTrue($upload->file_ext_tolower);
 
diff --git a/user_guide_src/source/general/compatibility_functions.rst b/user_guide_src/source/general/compatibility_functions.rst
index 434b098..936f2a2 100644
--- a/user_guide_src/source/general/compatibility_functions.rst
+++ b/user_guide_src/source/general/compatibility_functions.rst
@@ -222,29 +222,6 @@
 	For more information, please refer to the `PHP manual for
 	array_column() <http://php.net/array_column>`_.
 
-.. php:function:: array_replace(array $array1[, ...])
-
-	:param	array	$array1: Array in which to replace elements
-	:param	array	...: Array (or multiple ones) from which to extract elements
-	:returns:	Modified array
-	:rtype:	array
-
-	For more information, please refer to the `PHP manual for
-	array_replace() <http://php.net/array_replace>`_.
-
-.. php:function:: array_replace_recursive(array $array1[, ...])
-
-	:param	array	$array1: Array in which to replace elements
-	:param	array	...: Array (or multiple ones) from which to extract elements
-	:returns:	Modified array
-	:rtype:	array
-
-	For more information, please refer to the `PHP manual for
-	array_replace_recursive() <http://php.net/array_replace_recursive>`_.
-
-	.. important:: Only PHP's native function can detect endless recursion.
-		Unless you are running PHP 5.3+, be careful with references!
-
 .. php:function:: hex2bin($data)
 
 	:param	array	$data: Hexadecimal representation of data
@@ -253,12 +230,3 @@
 
 	For more information, please refer to the `PHP manual for hex2bin()
 	<http://php.net/hex2bin>`_.
-
-.. php:function:: quoted_printable_encode($str)
-
-	:param	string	$str: Input string
-	:returns:	8bit-encoded string
-	:rtype:	string
-
-	For more information, please refer to the `PHP manual for
-	quoted_printable_encode() <http://php.net/quoted_printable_encode>`_.
\ No newline at end of file
diff --git a/user_guide_src/source/general/hooks.rst b/user_guide_src/source/general/hooks.rst
index ffe3fef..6cc3407 100644
--- a/user_guide_src/source/general/hooks.rst
+++ b/user_guide_src/source/general/hooks.rst
@@ -56,8 +56,8 @@
 -  **params** Any parameters you wish to pass to your script. This item
    is optional.
 
-If you're running PHP 5.3+, you can also use lambda/anoymous functions
-(or closures) as hooks, with a simpler syntax::
+You can also use lambda/anoymous functions (or closures) as hooks, with
+a simpler syntax::
 
 	$hook['post_controller'] = function()
 	{
diff --git a/user_guide_src/source/general/routing.rst b/user_guide_src/source/general/routing.rst
index 5153680..b53a85d 100644
--- a/user_guide_src/source/general/routing.rst
+++ b/user_guide_src/source/general/routing.rst
@@ -133,8 +133,8 @@
 Callbacks
 =========
 
-If you are using PHP >= 5.3 you can use callbacks in place of the normal
-routing rules to process the back-references. Example::
+You can also use callbacks in place of the normal routing rules to process
+the back-references. Example::
 
 	$route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)
 	{
diff --git a/user_guide_src/source/general/security.rst b/user_guide_src/source/general/security.rst
index 8afdaca..744a2c9 100644
--- a/user_guide_src/source/general/security.rst
+++ b/user_guide_src/source/general/security.rst
@@ -133,12 +133,7 @@
    in PHP's own `Password Hashing <http://php.net/password>`_ functions.
 
    Please use them, even if you're not running PHP 5.5+, CodeIgniter
-   provides them for you as long as you're running at least PHP version
-   5.3.7 (and if you don't meet that requirement - please, upgrade).
-
-   If you're one of the really unlucky people who can't even upgrade to a
-   more recent PHP version, use `hash_pbkdf() <http://php.net/hash_pbkdf2>`,
-   which we also provide in our compatibility layer.
+   provides them for you.
 
 -  DO NOT ever display or send a password in plain-text format!
 
diff --git a/user_guide_src/source/libraries/encryption.rst b/user_guide_src/source/libraries/encryption.rst
index cac4b79..377e650 100644
--- a/user_guide_src/source/libraries/encryption.rst
+++ b/user_guide_src/source/libraries/encryption.rst
@@ -13,7 +13,7 @@
 You must meet one of the following dependencies in order to use this
 library:
 
-- `OpenSSL <http://php.net/openssl>`_ (and PHP 5.3.3)
+- `OpenSSL <http://php.net/openssl>`_
 - `MCrypt <http://php.net/mcrypt>`_ (and `MCRYPT_DEV_URANDOM` availability)
 
 If neither of the above dependencies is met, we simply cannot offer
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index b03b544..5b9a742 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -495,8 +495,7 @@
 
 This is just an example of course, and callbacks aren't limited to models.
 You can use any object/method that accepts the field value as its' first
-parameter. Or if you're running PHP 5.3+, you can also use an anonymous
-function::
+parameter. You can also use an anonymous function::
 
 	$this->form_validation->set_rules(
 		'username', 'Username',
@@ -522,7 +521,7 @@
 		)
 	);
 
-Anonymous function (PHP 5.3+) version::
+Anonymous function version::
 
 	$this->form_validation->set_rules(
 		'username', 'Username',
